package es.udc.pfc.davidparedes.model.taskservice;

import java.util.Calendar;
import java.util.List;

import es.udc.pfc.davidparedes.model.mission.Mission;
import es.udc.pfc.davidparedes.model.shift.Shift;
import es.udc.pfc.davidparedes.model.task.Task;
import es.udc.pfc.davidparedes.model.unavailable.Unavailable;
import es.udc.pfc.davidparedes.model.util.InstanceNotFoundException;

public interface TaskService {
	
	public Shift addShift(Calendar start, Calendar end, char permanent, Long managerId)
			throws InstanceNotFoundException;
	
	public List<Shift> addShiftsRange(Calendar start, Calendar end, char permanent, Long managerId)
			throws InstanceNotFoundException;
	
	public void updateShift(Long shiftId, Calendar start, Calendar end, char permanent,
			Long managerId) throws InstanceNotFoundException;
	
	public void removeShift(Long shiftId) throws InstanceNotFoundException;
	
	public Shift findShift(long shiftId)
			throws InstanceNotFoundException;
	
	public List<Shift> getShiftsByDate(Long managerId, Calendar start, Calendar end)
			throws InstanceNotFoundException;
	
	public Unavailable addUnavailable(Calendar start, Calendar end, Long vendorId)
			throws InstanceNotFoundException;
	
	public List<Unavailable> addUnavailablesRange(Calendar start, Calendar end, Long vendorId)
			throws InstanceNotFoundException;
	
	public void updateUnavailable(Long unavailableId, Calendar start, Calendar end,
			Long vendorId) throws InstanceNotFoundException;
	
	public void removeUnavailable(Long unavailableId) throws InstanceNotFoundException;
	
	public Unavailable findUnavailable(long unavailableId)
			throws InstanceNotFoundException;
	
	public List<Unavailable> getUnavailablesByDate(Long vendorId, Calendar start, Calendar end)
			throws InstanceNotFoundException;
	
	public Mission addMission(String name, Calendar start, Calendar end, char type, Long vendorId, Long storeId)
			throws InstanceNotFoundException;
	
	public List<Mission> addMissionsRange(String name, Calendar start, Calendar end, char type, Long vendorId, Long storeId)
			throws InstanceNotFoundException;
	
	public void updateMission(Long missionId, String name, Calendar start, Calendar end, char type,
			Long vendorId, Long storeId)
			throws InstanceNotFoundException;
	
	public void removeMission(Long missionId) throws InstanceNotFoundException;
	
	public Mission findMission(long missionId)
			throws InstanceNotFoundException;
	
	public List<Mission> getMissionsByDate(Long vendorId, Calendar start, Calendar end)
			throws InstanceNotFoundException;
	
	public Task addTask(Calendar start, Calendar end, char type,
			Long vendorId, Long universeId) throws InstanceNotFoundException;
	
	public List<Task> addTasksRange(Calendar start, Calendar end, char type,
			Long vendorId, Long universeId) throws InstanceNotFoundException;
	
	public void updateTask(Long taskId, Calendar start, Calendar end, char type,
			Long vendorId, Long universeId)
			throws InstanceNotFoundException;
	
	public void removeTask(Long taskId) throws InstanceNotFoundException;
	
	public Task findTask(long taskId)
			throws InstanceNotFoundException;
	
	public List<Task> getTasksByDate(Long vendorId, Calendar start, Calendar end)
			throws InstanceNotFoundException;

}
